package secondStage.part5.多线程.生产者消费者;

/**
 * @ClassName: [Box]
 * @Description: 奶箱类
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-05]
 * @Version: [v1.0]
 */
public class Box {
    //定义一个成员变量，表示第x瓶奶
    private int milk;
    //定义一个成员变量，表示奶箱的状态
    private boolean state = false;

    //提供存储牛奶和扶取牛奶的操作
    public synchronized void put(int milk) {
        //如果有牛奶，等待消费
        if (state) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //如果没有牛奶，就生产牛奶
        this.milk = milk;
        System.out.println("送奶工将第" + this.milk + "瓶奶放入奶箱");
        //生产完毕后，修改奶箱状态
        state = true;
        //唤醒其他等待线程
        notifyAll();
    }

    public synchronized void get() {
        //如果没有牛奶，等待生产
        if (!state) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //如果有牛奶，就消费
        System.out.println("用户拿到第" + this.milk + "瓶奶");
        //消费完毕后，修改奶箱状态
        state = false;
        //唤醒其他等待线程
        notifyAll();
    }
}
